﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

using SIGERP_Entidades;

namespace SIGERP_Datos
{
    public class HndSubtipoReclamo
    {
        public static List<SubtipoReclamo> getAll()
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.subtipo_reclamo ORDER BY id_tipo_reclamo");
            var subtipos = new List<SubtipoReclamo>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                SubtipoReclamo st = new SubtipoReclamo(dtRow);
                st.departamento = HndDepartamento.getOne(Convert.ToInt32(dtRow["id_departamento_inicial"]));
                st.tipo = HndTiposReclamo.GetOne(Convert.ToInt32(dtRow["id_tipo_reclamo"]));
                subtipos.Add(st);
            }
            return subtipos;
        }

        public static SubtipoReclamo getOne(int id)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.subtipo_reclamo WHERE id_subtipo_reclamo=" + id);
            DataRow dtRow = tabla.Rows[0];
            SubtipoReclamo st = new SubtipoReclamo(dtRow);
            st.departamento = HndDepartamento.getOne(Convert.ToInt32(dtRow["id_departamento_inicial"]));
            st.tipo = HndTiposReclamo.GetOne(Convert.ToInt32(dtRow["id_tipo_reclamo"]));
            return st;
        }

        public static Boolean insert(SubtipoReclamo subtipo)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "INSERT INTO dbo.subtipo_reclamo (id_tipo_reclamo, descripcion,habilitado,id_departamento_inicial) VALUES (@id_tipo_reclamo,@descripcion,1,@id_departamento_inicial)";
            comando.Parameters.AddWithValue("@id_tipo_reclamo", subtipo.tipo.id);
            comando.Parameters.AddWithValue("@descripcion", subtipo.descripcion);
            comando.Parameters.AddWithValue("@id_departamento_inicial", subtipo.departamento.id);
            return Conexion.ejecutaComando(comando);
        }

        public static Boolean update(SubtipoReclamo subtipo)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.subtipo_reclamo SET id_tipo_reclamo=@id_tipo_reclamo, descripcion=@descripcion,habilitado=@habilitado,id_departamento_inicial=@id_departamento_inicial WHERE id_subtipo_reclamo=@id";
            comando.Parameters.AddWithValue("@descripcion", subtipo.descripcion);
            if (subtipo.habilitado) comando.Parameters.AddWithValue("@habilitado", 1);
            else comando.Parameters.AddWithValue("@habilitado", 0);
            comando.Parameters.AddWithValue("@id_departamento_inicial", subtipo.departamento.id);
            comando.Parameters.AddWithValue("@id_tipo_reclamo", subtipo.tipo.id);
            comando.Parameters.AddWithValue("@id", subtipo.id);

            return Conexion.ejecutaComando(comando);
        }

        public static Boolean delete(SubtipoReclamo subtipo)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "DELETE FROM dbo.subtipo_reclamo WHERE id_subtipo_reclamo=@id";
            comando.Parameters.AddWithValue("@id", subtipo.id);
            return Conexion.ejecutaComando(comando);
        }


        public static bool validarSiExiste(SubtipoReclamo sr)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.subtipo_reclamo WHERE descripcion='" + sr.descripcion + "' and id_tipo_reclamo= " + sr.tipo.id);
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }

        public static bool hayReclamosAsociados(SubtipoReclamo st)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT COUNT(*) FROM dbo.reclamo WHERE id_subtipo=" + st.id);
            DataRow dtRow = tabla.Rows[0];

            bool existe = false;
            if (Convert.ToInt32(dtRow[0]) > 0) existe = true;
            return existe;
        }

        public static Boolean disable(SubtipoReclamo st)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.subtipo_reclamo SET habilitado=0 WHERE id_subtipo_reclamo=@id";
            comando.Parameters.AddWithValue("@id", st.id);

            return Conexion.ejecutaComando(comando);
        }
    }
}
